package main

import (
	"embed"
	"flag"
	"fmt"
	"zpay/bootstrap"
	btsConfig "zpay/config"
	"zpay/pkg/config"
	"zpay/pkg/logger"

	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
)

func init() {
	btsConfig.Initialize()
}

// 嵌入web所需的静态资源
//
//go:embed web/dist/*
var staticFS embed.FS

func main() {
	// 配置初始化，依赖 --env 参数
	var env string
	flag.StringVar(&env, "env", "", "加载 .env 文件, 如 --env=testing 加载的是 .env.testing 文件")
	flag.Parse()
	config.InitConfig(env)

	// 初始化 Logger
	bootstrap.SetupLogger()

	// 设置 gin 的运行模式，支持 debug, release, test
	// release 会屏蔽调试信息，官方建议生产环境中使用
	// 非 release 模式 gin 终端打印太多信息，干扰到我们程序中的 Log
	// 故此设置为 release，有特殊情况手动改为 debug 即可
	gin.SetMode(gin.ReleaseMode)

	// 初始化 Redis
	bootstrap.SetupRedis()

	// 初始化数据库
	bootstrap.SetupDB()

	//创建路由
	router := gin.New()

	// 初始化路由
	bootstrap.SetupRoute(router, staticFS)

	host := ":" + config.Get("app.port")
	logger.Info("main", zap.String("start_server", host))
	err := router.Run(host)
	if err != nil {
		fmt.Println(err.Error())
	}
}
